package cn.yoaket.algorithm;//package algorithm;
//import com.yoaker.unit.Point;
//
//import java.util.Comparator;
//
//public class ClockComparator implements Comparator<Point> {
//    Point center;
//    public ClockComparator(Point center){
//        this.center = center;
//    }

//    @Override
//    public int compare(Point a, Point b) {
//        if (a.getX() == b.getX() && a.getY() == b.getY())
//            return 0;
//        if (a.getX() >= 0 && b.getX() < 0)
//            return 1;
//        if (a.getX() == 0 && b.getX() == 0)
//            return a.getY() > b.getY() ? 1: -1;
//        //向量OA和向量OB的叉积
//        double det = (a.getX() - center.getX()) * (b.getY() - center.getY()) - (b.getX() - center.getX()) * (a.getY() - center.getY());
//        if (det < 0)
//            return 1;
//        if (det > 0)
//            return -1;
//        //向量OA和向量OB共线，以距离判断大小
//        double d1 = (a.getX() - center.getX()) * (a.getX() - center.getX()) + (a.getY() - center.getY()) * (a.getY() - center.getY());
//        double d2 = (b.getX() - center.getX()) * (b.getX() - center.getY()) + (b.getY() - center.getY()) * (b.getY() - center.getY());
//        return d1 > d2 ? 1: -1;
//    }
//
//
//    @Override
//    public int compare(Point a, Point b) {
//
//        if(a.equals(b))
//            return 0;
//
//        double oax = a.getX() - center.getX();
//        double oay = a.getY() - center.getY();
//        double obx = b.getX() - center.getX();
//        double oby = b.getY() - center.getY();
//
//
//        double atan2a = Math.atan2(oay, oax);
//        double atan2b = Math.atan2(oby, obx);
//        if (atan2a < 0) atan2a = atan2a + 3.1415926 * 2;
//        if (atan2b < 0) atan2b = atan2b + 3.1415926 * 2;   // 小于0的角度需要变换下，使得它可以进行总体的角度排序；
//        return atan2a > atan2b ? 1: -1;
//    }
//}
